<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::gpu::kinfuLS::CyclicalBuffer类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::gpu::kinfuLS::CyclicalBuffer类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a> implements a cyclical TSDF buffer. The class offers a simple interface, by handling shifts and maintaining the world autonomously.  
 <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="cyclical__buffer_8h_source.html">cyclical_buffer.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:af90266c84c6654e147369129a21d157d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#af90266c84c6654e147369129a21d157d">CyclicalBuffer</a> (const double distance_threshold, const double cube_size=3.f, const int nb_voxels_per_axis=512)</td></tr>
<tr class="memdesc:af90266c84c6654e147369129a21d157d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor for a cubic <a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a>.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#af90266c84c6654e147369129a21d157d">更多...</a><br /></td></tr>
<tr class="separator:af90266c84c6654e147369129a21d157d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5025dd75e4356724c3c57495cf6d974"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ac5025dd75e4356724c3c57495cf6d974">CyclicalBuffer</a> (const double distance_threshold, const double volume_size_x, const double volume_size_y, const double volume_size_z, const int nb_voxels_x, const int nb_voxels_y, const int nb_voxels_z)</td></tr>
<tr class="memdesc:ac5025dd75e4356724c3c57495cf6d974"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor for a non-cubic <a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a>.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ac5025dd75e4356724c3c57495cf6d974">更多...</a><br /></td></tr>
<tr class="separator:ac5025dd75e4356724c3c57495cf6d974"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab79b510af9c3930221c09dec295c5070"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ab79b510af9c3930221c09dec295c5070">checkForShift</a> (const TsdfVolume::Ptr volume, const Eigen::Affine3f &amp;cam_pose, const double distance_camera_target, const bool perform_shift=true, const bool last_shift=false, const bool force_shift=false)</td></tr>
<tr class="memdesc:ab79b510af9c3930221c09dec295c5070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if shifting needs to be performed, returns true if so. Shifting is considered needed if the target point is farther than distance_treshold_. The target point is located at distance_camera_point on the local Z axis of the camera.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ab79b510af9c3930221c09dec295c5070">更多...</a><br /></td></tr>
<tr class="separator:ab79b510af9c3930221c09dec295c5070"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb9569a8779ef4d85fd96edc2bdd2f7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#aeb9569a8779ef4d85fd96edc2bdd2f7d">performShift</a> (const TsdfVolume::Ptr volume, const <a class="el" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a> &amp;target_point, const bool last_shift=false)</td></tr>
<tr class="memdesc:aeb9569a8779ef4d85fd96edc2bdd2f7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform shifting operations: Compute offsets. Extract current slice from TSDF buffer. Extract existing data from world. Clear shifted slice in TSDF buffer. Push existing data into TSDF buffer. Update rolling buffer Update world model.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#aeb9569a8779ef4d85fd96edc2bdd2f7d">更多...</a><br /></td></tr>
<tr class="separator:aeb9569a8779ef4d85fd96edc2bdd2f7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a996fffe9ad39c8e58f4bdb7f4d160465"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a996fffe9ad39c8e58f4bdb7f4d160465">setDistanceThreshold</a> (const double threshold)</td></tr>
<tr class="memdesc:a996fffe9ad39c8e58f4bdb7f4d160465"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the distance threshold between cube's center and target point that triggers a shift.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a996fffe9ad39c8e58f4bdb7f4d160465">更多...</a><br /></td></tr>
<tr class="separator:a996fffe9ad39c8e58f4bdb7f4d160465"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf3fd4df35f18071b553b3214e1b77fd"><td class="memItemLeft" align="right" valign="top"><a id="acf3fd4df35f18071b553b3214e1b77fd"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#acf3fd4df35f18071b553b3214e1b77fd">getDistanceThreshold</a> ()</td></tr>
<tr class="memdesc:acf3fd4df35f18071b553b3214e1b77fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the distance threshold between cube's center and target point that triggers a shift. <br /></td></tr>
<tr class="separator:acf3fd4df35f18071b553b3214e1b77fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a857e288835a318793fff350c886a702d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html">tsdf_buffer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a857e288835a318793fff350c886a702d">getBuffer</a> ()</td></tr>
<tr class="memdesc:a857e288835a318793fff350c886a702d"><td class="mdescLeft">&#160;</td><td class="mdescRight">get a pointer to the <a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html" title="Structure to handle buffer addresses">tsdf_buffer</a> structure.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a857e288835a318793fff350c886a702d">更多...</a><br /></td></tr>
<tr class="separator:a857e288835a318793fff350c886a702d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed6edeafb6187d03e83a14e3d5e9d064"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#aed6edeafb6187d03e83a14e3d5e9d064">setVolumeSize</a> (const double size_x, const double size_y, const double size_z)</td></tr>
<tr class="memdesc:aed6edeafb6187d03e83a14e3d5e9d064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the physical size represented by the default TSDF volume.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#aed6edeafb6187d03e83a14e3d5e9d064">更多...</a><br /></td></tr>
<tr class="separator:aed6edeafb6187d03e83a14e3d5e9d064"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a121a9e71ef4d0efd9181c01b93d89c33"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a121a9e71ef4d0efd9181c01b93d89c33">setVolumeSize</a> (const double size)</td></tr>
<tr class="memdesc:a121a9e71ef4d0efd9181c01b93d89c33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the physical size represented by the default TSDF volume.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a121a9e71ef4d0efd9181c01b93d89c33">更多...</a><br /></td></tr>
<tr class="separator:a121a9e71ef4d0efd9181c01b93d89c33"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1184651e49f5b8cdf98b066f3de1ba2f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a1184651e49f5b8cdf98b066f3de1ba2f">computeAndSetNewCubeMetricOrigin</a> (const <a class="el" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a> &amp;target_point, int &amp;shiftX, int &amp;shiftY, int &amp;shiftZ)</td></tr>
<tr class="memdesc:a1184651e49f5b8cdf98b066f3de1ba2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes and set the origin of the new cube (relative to the world), centered around a the target point.  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a1184651e49f5b8cdf98b066f3de1ba2f">更多...</a><br /></td></tr>
<tr class="separator:a1184651e49f5b8cdf98b066f3de1ba2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6a4e6bc0babb621392837a530dd15b7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ae6a4e6bc0babb621392837a530dd15b7">initBuffer</a> (TsdfVolume::Ptr tsdf_volume)</td></tr>
<tr class="memdesc:ae6a4e6bc0babb621392837a530dd15b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes memory pointers of the cyclical buffer (start, end, current origin)  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ae6a4e6bc0babb621392837a530dd15b7">更多...</a><br /></td></tr>
<tr class="separator:ae6a4e6bc0babb621392837a530dd15b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5cd8edfdcbf8311065948d9cc91e612a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a5cd8edfdcbf8311065948d9cc91e612a">resetBuffer</a> (TsdfVolume::Ptr tsdf_volume)</td></tr>
<tr class="memdesc:a5cd8edfdcbf8311065948d9cc91e612a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset buffer structure  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a5cd8edfdcbf8311065948d9cc91e612a">更多...</a><br /></td></tr>
<tr class="separator:a5cd8edfdcbf8311065948d9cc91e612a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1551c9447111023ad662d9ceb4e3077"><td class="memItemLeft" align="right" valign="top"><a id="af1551c9447111023ad662d9ceb4e3077"></a>
<a class="el" href="classpcl_1_1kinfu_l_s_1_1_world_model.html">pcl::kinfuLS::WorldModel</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt; *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#af1551c9447111023ad662d9ceb4e3077">getWorldModel</a> ()</td></tr>
<tr class="memdesc:af1551c9447111023ad662d9ceb4e3077"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a pointer to the world model <br /></td></tr>
<tr class="separator:af1551c9447111023ad662d9ceb4e3077"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:afef3727efdef4c514ddeb59d210bdf72"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#afef3727efdef4c514ddeb59d210bdf72">shiftOrigin</a> (TsdfVolume::Ptr tsdf_volume, const int offset_x, const int offset_y, const int offset_z)</td></tr>
<tr class="memdesc:afef3727efdef4c514ddeb59d210bdf72"><td class="mdescLeft">&#160;</td><td class="mdescRight">updates cyclical buffer origins given offsets on X, Y and Z  <a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#afef3727efdef4c514ddeb59d210bdf72">更多...</a><br /></td></tr>
<tr class="separator:afef3727efdef4c514ddeb59d210bdf72"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a91f8d80ea368b18ad77700f8051d6ee5"><td class="memItemLeft" align="right" valign="top"><a id="a91f8d80ea368b18ad77700f8051d6ee5"></a>
<a class="el" href="classpcl_1_1gpu_1_1_device_array.html">DeviceArray</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z.html">PointXYZ</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a91f8d80ea368b18ad77700f8051d6ee5">cloud_buffer_device_xyz_</a></td></tr>
<tr class="memdesc:a91f8d80ea368b18ad77700f8051d6ee5"><td class="mdescLeft">&#160;</td><td class="mdescRight">buffer used to extract XYZ values from GPU <br /></td></tr>
<tr class="separator:a91f8d80ea368b18ad77700f8051d6ee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c9b037b5d2ae8dd414fc11ccce455dd"><td class="memItemLeft" align="right" valign="top"><a id="a5c9b037b5d2ae8dd414fc11ccce455dd"></a>
<a class="el" href="classpcl_1_1gpu_1_1_device_array.html">DeviceArray</a>&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a5c9b037b5d2ae8dd414fc11ccce455dd">cloud_buffer_device_intensities_</a></td></tr>
<tr class="memdesc:a5c9b037b5d2ae8dd414fc11ccce455dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">buffer used to extract <a class="el" href="structpcl_1_1_intensity.html" title="A point structure representing the grayscale intensity in single-channel images. Intensity is represe...">Intensity</a> values from GPU <br /></td></tr>
<tr class="separator:a5c9b037b5d2ae8dd414fc11ccce455dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6222d822f5a83122a4d5e0ae4a5bf39a"><td class="memItemLeft" align="right" valign="top"><a id="a6222d822f5a83122a4d5e0ae4a5bf39a"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a6222d822f5a83122a4d5e0ae4a5bf39a">distance_threshold_</a></td></tr>
<tr class="memdesc:a6222d822f5a83122a4d5e0ae4a5bf39a"><td class="mdescLeft">&#160;</td><td class="mdescRight">distance threshold (cube's center to target point) to trigger shift <br /></td></tr>
<tr class="separator:a6222d822f5a83122a4d5e0ae4a5bf39a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adff8774906a647e39676e22e3986f319"><td class="memItemLeft" align="right" valign="top"><a id="adff8774906a647e39676e22e3986f319"></a>
<a class="el" href="classpcl_1_1kinfu_l_s_1_1_world_model.html">pcl::kinfuLS::WorldModel</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#adff8774906a647e39676e22e3986f319">world_model_</a></td></tr>
<tr class="memdesc:adff8774906a647e39676e22e3986f319"><td class="mdescLeft">&#160;</td><td class="mdescRight">world model object that maintains the known world <br /></td></tr>
<tr class="separator:adff8774906a647e39676e22e3986f319"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21ce14ce589b1e7489c459a45baf6168"><td class="memItemLeft" align="right" valign="top"><a id="a21ce14ce589b1e7489c459a45baf6168"></a>
<a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html">tsdf_buffer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a></td></tr>
<tr class="memdesc:a21ce14ce589b1e7489c459a45baf6168"><td class="mdescLeft">&#160;</td><td class="mdescRight">structure that contains all TSDF buffer's addresses <br /></td></tr>
<tr class="separator:a21ce14ce589b1e7489c459a45baf6168"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><p><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a> implements a cyclical TSDF buffer. The class offers a simple interface, by handling shifts and maintaining the world autonomously. </p>
<dl class="section author"><dt>作者</dt><dd>Raphael Favier, Francisco Heredia </dd></dl>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="af90266c84c6654e147369129a21d157d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af90266c84c6654e147369129a21d157d">&#9670;&nbsp;</a></span>CyclicalBuffer() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer </td>
          <td>(</td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>distance_threshold</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>cube_size</em> = <code>3.f</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>nb_voxels_per_axis</em> = <code>512</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructor for a cubic <a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a>. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">distance_threshold</td><td>distance between cube center and target point at which we decide to shift. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cube_size</td><td>physical size (in meters) of the volume (here, a cube) represented by the TSDF buffer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">nb_voxels_per_axis</td><td>number of voxels per axis of the volume represented by the TSDF buffer. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;          {</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a6222d822f5a83122a4d5e0ae4a5bf39a">distance_threshold_</a> = distance_threshold;</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.x = cube_size; </div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.y = cube_size; </div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.z = cube_size;</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x = nb_voxels_per_axis; </div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y = nb_voxels_per_axis; </div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z = nb_voxels_per_axis; </div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;          }</div>
<div class="ttc" id="aclasspcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer_html_a21ce14ce589b1e7489c459a45baf6168"><div class="ttname"><a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">pcl::gpu::kinfuLS::CyclicalBuffer::buffer_</a></div><div class="ttdeci">tsdf_buffer buffer_</div><div class="ttdoc">structure that contains all TSDF buffer's addresses</div><div class="ttdef"><b>Definition:</b> cyclical_buffer.h:228</div></div>
<div class="ttc" id="aclasspcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer_html_a6222d822f5a83122a4d5e0ae4a5bf39a"><div class="ttname"><a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a6222d822f5a83122a4d5e0ae4a5bf39a">pcl::gpu::kinfuLS::CyclicalBuffer::distance_threshold_</a></div><div class="ttdeci">double distance_threshold_</div><div class="ttdoc">distance threshold (cube's center to target point) to trigger shift</div><div class="ttdef"><b>Definition:</b> cyclical_buffer.h:222</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a4aba973b4e0f8a5681283cd17762c39c"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">pcl::gpu::kinfuLS::tsdf_buffer::voxels_size</a></div><div class="ttdeci">int3 voxels_size</div><div class="ttdoc">Number of voxels in the volume, per axis</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:69</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a5e300a34d4220de4558ecf3bfa353306"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">pcl::gpu::kinfuLS::tsdf_buffer::volume_size</a></div><div class="ttdeci">float3 volume_size</div><div class="ttdoc">Size of the volume, in meters.</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:67</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac5025dd75e4356724c3c57495cf6d974"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5025dd75e4356724c3c57495cf6d974">&#9670;&nbsp;</a></span>CyclicalBuffer() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pcl::gpu::kinfuLS::CyclicalBuffer::CyclicalBuffer </td>
          <td>(</td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>distance_threshold</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>volume_size_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>volume_size_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>volume_size_z</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>nb_voxels_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>nb_voxels_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>nb_voxels_z</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructor for a non-cubic <a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html" title="CyclicalBuffer implements a cyclical TSDF buffer. The class offers a simple interface,...">CyclicalBuffer</a>. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">distance_threshold</td><td>distance between cube center and target point at which we decide to shift. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">volume_size_x</td><td>physical size (in meters) of the volume, X axis. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">volume_size_y</td><td>physical size (in meters) of the volume, Y axis. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">volume_size_z</td><td>physical size (in meters) of the volume, Z axis. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">nb_voxels_x</td><td>number of voxels for X axis of the volume represented by the TSDF buffer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">nb_voxels_y</td><td>number of voxels for Y axis of the volume represented by the TSDF buffer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">nb_voxels_z</td><td>number of voxels for Z axis of the volume represented by the TSDF buffer. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;          {</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a6222d822f5a83122a4d5e0ae4a5bf39a">distance_threshold_</a> = distance_threshold;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.x = volume_size_x; </div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.y = volume_size_y; </div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.z = volume_size_z;</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x = nb_voxels_x; </div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y = nb_voxels_y; </div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z = nb_voxels_z; </div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;          }</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="ab79b510af9c3930221c09dec295c5070"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab79b510af9c3930221c09dec295c5070">&#9670;&nbsp;</a></span>checkForShift()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool pcl::gpu::kinfuLS::CyclicalBuffer::checkForShift </td>
          <td>(</td>
          <td class="paramtype">const TsdfVolume::Ptr&#160;</td>
          <td class="paramname"><em>volume</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>cam_pose</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>distance_camera_target</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>perform_shift</em> = <code>true</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>last_shift</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>force_shift</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Check if shifting needs to be performed, returns true if so. Shifting is considered needed if the target point is farther than distance_treshold_. The target point is located at distance_camera_point on the local Z axis of the camera. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">volume</td><td>pointer to the <a class="el" href="classpcl_1_1_t_s_d_f_volume.html">TSDFVolume</a> living in GPU </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cam_pose</td><td>global pose of the camera in the world </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">distance_camera_target</td><td>distance from the camera's origin to the target point </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">perform_shift</td><td>if set to false, shifting is not performed. The function will return true if shifting is needed. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">last_shift</td><td>if set to true, the whole cube will be shifted. This is used to push the whole cube to the world model. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">force_shift</td><td>if set to true, shifting is forced. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>true is the cube needs to be or has been shifted. </dd></dl>

</div>
</div>
<a id="a1184651e49f5b8cdf98b066f3de1ba2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1184651e49f5b8cdf98b066f3de1ba2f">&#9670;&nbsp;</a></span>computeAndSetNewCubeMetricOrigin()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::computeAndSetNewCubeMetricOrigin </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a> &amp;&#160;</td>
          <td class="paramname"><em>target_point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int &amp;&#160;</td>
          <td class="paramname"><em>shiftX</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int &amp;&#160;</td>
          <td class="paramname"><em>shiftY</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int &amp;&#160;</td>
          <td class="paramname"><em>shiftZ</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes and set the origin of the new cube (relative to the world), centered around a the target point. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">target_point</td><td>the target point around which the new cube will be centered. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">shiftX</td><td>shift on X axis (in indices). </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">shiftY</td><td>shift on Y axis (in indices). </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">shiftZ</td><td>shift on Z axis (in indices). </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a857e288835a318793fff350c886a702d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a857e288835a318793fff350c886a702d">&#9670;&nbsp;</a></span>getBuffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html">tsdf_buffer</a>* pcl::gpu::kinfuLS::CyclicalBuffer::getBuffer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>get a pointer to the <a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html" title="Structure to handle buffer addresses">tsdf_buffer</a> structure. </p>
<dl class="section return"><dt>返回</dt><dd>a pointer to the <a class="el" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html" title="Structure to handle buffer addresses">tsdf_buffer</a> used by cyclical buffer object. </dd></dl>
<div class="fragment"><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;{ <span class="keywordflow">return</span> (&amp;<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>); }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae6a4e6bc0babb621392837a530dd15b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6a4e6bc0babb621392837a530dd15b7">&#9670;&nbsp;</a></span>initBuffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::initBuffer </td>
          <td>(</td>
          <td class="paramtype">TsdfVolume::Ptr&#160;</td>
          <td class="paramname"><em>tsdf_volume</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Initializes memory pointers of the cyclical buffer (start, end, current origin) </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tsdf_volume</td><td>pointer to the TSDF volume managed by this cyclical buffer </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;          {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;            PtrStep&lt;short2&gt; localVolume = tsdf_volume-&gt;data();</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;            </div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a0330778547cec0b4dd387be54cc394d3">tsdf_memory_start</a> = &amp;(localVolume.ptr (0)[0]);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a19fb957590124954134f953f2c317e75">tsdf_memory_end</a> = &amp;(localVolume.ptr (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y * (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z - 1) + (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y - 1) )[<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x - 1]);</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a45e39db0620e3613adf0e07ea47a3960">tsdf_rolling_buff_origin</a> = <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a0330778547cec0b4dd387be54cc394d3">tsdf_memory_start</a>;</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;          }</div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a0330778547cec0b4dd387be54cc394d3"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a0330778547cec0b4dd387be54cc394d3">pcl::gpu::kinfuLS::tsdf_buffer::tsdf_memory_start</a></div><div class="ttdeci">short2 * tsdf_memory_start</div><div class="ttdoc">Address of the first element of the TSDF volume in memory</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:55</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a19fb957590124954134f953f2c317e75"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a19fb957590124954134f953f2c317e75">pcl::gpu::kinfuLS::tsdf_buffer::tsdf_memory_end</a></div><div class="ttdeci">short2 * tsdf_memory_end</div><div class="ttdoc">Address of the last element of the TSDF volume in memory</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:57</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a45e39db0620e3613adf0e07ea47a3960"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a45e39db0620e3613adf0e07ea47a3960">pcl::gpu::kinfuLS::tsdf_buffer::tsdf_rolling_buff_origin</a></div><div class="ttdeci">short2 * tsdf_rolling_buff_origin</div><div class="ttdoc">Memory address of the origin of the rolling buffer. MUST BE UPDATED AFTER EACH SHIFT.</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:59</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="aeb9569a8779ef4d85fd96edc2bdd2f7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb9569a8779ef4d85fd96edc2bdd2f7d">&#9670;&nbsp;</a></span>performShift()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::performShift </td>
          <td>(</td>
          <td class="paramtype">const TsdfVolume::Ptr&#160;</td>
          <td class="paramname"><em>volume</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a> &amp;&#160;</td>
          <td class="paramname"><em>target_point</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool&#160;</td>
          <td class="paramname"><em>last_shift</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Perform shifting operations: Compute offsets. Extract current slice from TSDF buffer. Extract existing data from world. Clear shifted slice in TSDF buffer. Push existing data into TSDF buffer. Update rolling buffer Update world model. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">volume</td><td>pointer to the <a class="el" href="classpcl_1_1_t_s_d_f_volume.html">TSDFVolume</a> living in GPU </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">target_point</td><td>target point around which the new cube will be centered </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">last_shift</td><td>if set to true, the whole cube will be shifted. This is used to push the whole cube to the world model. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a5cd8edfdcbf8311065948d9cc91e612a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5cd8edfdcbf8311065948d9cc91e612a">&#9670;&nbsp;</a></span>resetBuffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::resetBuffer </td>
          <td>(</td>
          <td class="paramtype">TsdfVolume::Ptr&#160;</td>
          <td class="paramname"><em>tsdf_volume</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Reset buffer structure </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tsdf_volume</td><td>pointer to the TSDF volume managed by this cyclical buffer </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;          {</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x = 0; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y = 0; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z = 0;</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.x = 0.f; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.y = 0.f; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.z = 0.f;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8644970214764c5569496ca0e0bb319e">origin_metric</a>.x = 0.f; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8644970214764c5569496ca0e0bb319e">origin_metric</a>.y = 0.f; <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8644970214764c5569496ca0e0bb319e">origin_metric</a>.z = 0.f;</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ae6a4e6bc0babb621392837a530dd15b7">initBuffer</a> (tsdf_volume);</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;          }</div>
<div class="ttc" id="aclasspcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer_html_ae6a4e6bc0babb621392837a530dd15b7"><div class="ttname"><a href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#ae6a4e6bc0babb621392837a530dd15b7">pcl::gpu::kinfuLS::CyclicalBuffer::initBuffer</a></div><div class="ttdeci">void initBuffer(TsdfVolume::Ptr tsdf_volume)</div><div class="ttdoc">Initializes memory pointers of the cyclical buffer (start, end, current origin)</div><div class="ttdef"><b>Definition:</b> cyclical_buffer.h:184</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a648311ec445d250adebc4053ba71515f"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">pcl::gpu::kinfuLS::tsdf_buffer::origin_GRID</a></div><div class="ttdeci">int3 origin_GRID</div><div class="ttdoc">Internal cube origin for rollign buffer.</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:61</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a8644970214764c5569496ca0e0bb319e"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8644970214764c5569496ca0e0bb319e">pcl::gpu::kinfuLS::tsdf_buffer::origin_metric</a></div><div class="ttdeci">float3 origin_metric</div><div class="ttdoc">Current metric origin of the cube, in world coordinates.</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:65</div></div>
<div class="ttc" id="astructpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer_html_a8b71686f1e40d7801a3c60a4dd3e479f"><div class="ttname"><a href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">pcl::gpu::kinfuLS::tsdf_buffer::origin_GRID_global</a></div><div class="ttdeci">float3 origin_GRID_global</div><div class="ttdoc">Cube origin in world coordinates.</div><div class="ttdef"><b>Definition:</b> tsdf_buffer.h:63</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a996fffe9ad39c8e58f4bdb7f4d160465"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a996fffe9ad39c8e58f4bdb7f4d160465">&#9670;&nbsp;</a></span>setDistanceThreshold()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::setDistanceThreshold </td>
          <td>(</td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>threshold</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the distance threshold between cube's center and target point that triggers a shift. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>the distance in meters at which to trigger shift. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;          { </div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a6222d822f5a83122a4d5e0ae4a5bf39a">distance_threshold_</a> = threshold; </div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;            <span class="comment">// PCL_INFO (&quot;Shifting threshold set to %f meters.\n&quot;, distance_threshold_);</span></div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;          }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a121a9e71ef4d0efd9181c01b93d89c33"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a121a9e71ef4d0efd9181c01b93d89c33">&#9670;&nbsp;</a></span>setVolumeSize() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::setVolumeSize </td>
          <td>(</td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the physical size represented by the default TSDF volume. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>size of the volume on all axis, in meters. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;          {</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.x = size;</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.y = size;</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.z = size;</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;          }</div>
</div><!-- fragment -->
</div>
</div>
<a id="aed6edeafb6187d03e83a14e3d5e9d064"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed6edeafb6187d03e83a14e3d5e9d064">&#9670;&nbsp;</a></span>setVolumeSize() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::setVolumeSize </td>
          <td>(</td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>size_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>size_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>size_z</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the physical size represented by the default TSDF volume. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">size_x</td><td>size of the volume on X axis, in meters. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">size_y</td><td>size of the volume on Y axis, in meters. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">size_z</td><td>size of the volume on Z axis, in meters. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;          {</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.x = size_x;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.y = size_y;</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a5e300a34d4220de4558ecf3bfa353306">volume_size</a>.z = size_z;</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;          }</div>
</div><!-- fragment -->
</div>
</div>
<a id="afef3727efdef4c514ddeb59d210bdf72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afef3727efdef4c514ddeb59d210bdf72">&#9670;&nbsp;</a></span>shiftOrigin()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::gpu::kinfuLS::CyclicalBuffer::shiftOrigin </td>
          <td>(</td>
          <td class="paramtype">TsdfVolume::Ptr&#160;</td>
          <td class="paramname"><em>tsdf_volume</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>offset_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>offset_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>offset_z</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>updates cyclical buffer origins given offsets on X, Y and Z </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tsdf_volume</td><td>pointer to the TSDF volume managed by this cyclical buffer </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset_x</td><td>offset in indices on axis X </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset_y</td><td>offset in indices on axis Y </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset_z</td><td>offset in indices on axis Z </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;          {</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;            <span class="comment">// shift rolling origin (making sure they keep in [0 - NbVoxels[ )</span></div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x += offset_x;</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;            <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x &gt;= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x)</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x -= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x &lt; 0)</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x += <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x;</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;              </div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y += offset_y;</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;            <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y &gt;= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y)</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y -= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y;</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y &lt; 0)</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y += <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y;  </div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            </div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z += offset_z;</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;            <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z &gt;= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z)</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z -= <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z;</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z &lt; 0)</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;              <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z += <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z; </div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;          </div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            <span class="comment">// update memory pointers</span></div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;            PtrStep&lt;short2&gt; localVolume = tsdf_volume-&gt;data();</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a0330778547cec0b4dd387be54cc394d3">tsdf_memory_start</a> = &amp;(localVolume.ptr (0)[0]);</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a19fb957590124954134f953f2c317e75">tsdf_memory_end</a> = &amp;(localVolume.ptr (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y * (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.z - 1) + (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y - 1) )[<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.x - 1]);</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a45e39db0620e3613adf0e07ea47a3960">tsdf_rolling_buff_origin</a> = &amp;(localVolume.ptr (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a4aba973b4e0f8a5681283cd17762c39c">voxels_size</a>.y * (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.z) + (<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.y) )[<a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a648311ec445d250adebc4053ba71515f">origin_GRID</a>.x]);</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            </div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;            <span class="comment">// update global origin</span></div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.x += offset_x;</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.y += offset_y;</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;            <a class="code" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html#a21ce14ce589b1e7489c459a45baf6168">buffer_</a>.<a class="code" href="structpcl_1_1gpu_1_1kinfu_l_s_1_1tsdf__buffer.html#a8b71686f1e40d7801a3c60a4dd3e479f">origin_GRID_global</a>.z += offset_z;</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;          }</div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>gpu/kinfu_large_scale/include/pcl/gpu/kinfu_large_scale/<a class="el" href="cyclical__buffer_8h_source.html">cyclical_buffer.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><b>gpu</b></li><li class="navelem"><b>kinfuLS</b></li><li class="navelem"><a class="el" href="classpcl_1_1gpu_1_1kinfu_l_s_1_1_cyclical_buffer.html">CyclicalBuffer</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
